﻿
using System;
using System.Reflection.Emit;

namespace IlGenUtil
{
	public static class IlGenExtensionsLdarg
	{
		public static IlGen<Lst<A0, S>, Lst<A0, Args>, Ret> Ldarg<A0, S, Args, Ret>(this IlGen<S, Lst<A0, Args>, Ret> g, N0 i)
		{
			g.il.Emit(OpCodes.Ldarg_0);
			return new IlGen<Lst<A0, S>, Lst<A0, Args>, Ret>(g.il);
		}

		public static IlGen<Lst<A0, S>, Lst<A1, Lst<A0, Args>>, Ret> Ldarg<A1, A0, S, Args, Ret>(this IlGen<S, Lst<A1, Lst<A0, Args>>, Ret> g, N1 i)
		{
			g.il.Emit(OpCodes.Ldarg_1);
			return new IlGen<Lst<A0, S>, Lst<A1, Lst<A0, Args>>, Ret>(g.il);
		}

		public static IlGen<Lst<A0, S>, Lst<A2, Lst<A1, Lst<A0, Args>>>, Ret> Ldarg<A2, A1, A0, S, Args, Ret>(this IlGen<S, Lst<A2, Lst<A1, Lst<A0, Args>>>, Ret> g, N2 i)
		{
			g.il.Emit(OpCodes.Ldarg_2);
			return new IlGen<Lst<A0, S>, Lst<A2, Lst<A1, Lst<A0, Args>>>, Ret>(g.il);
		}

		public static IlGen<Lst<A0, S>, Lst<A3, Lst<A2, Lst<A1, Lst<A0, Args>>>>, Ret> Ldarg<A3, A2, A1, A0, S, Args, Ret>(this IlGen<S, Lst<A3, Lst<A2, Lst<A1, Lst<A0, Args>>>>, Ret> g, N3 i)
		{
			g.il.Emit(OpCodes.Ldarg_3);
			return new IlGen<Lst<A0, S>, Lst<A3, Lst<A2, Lst<A1, Lst<A0, Args>>>>, Ret>(g.il);
		}

		public static IlGen<Lst<A0, S>, Lst<A4, Lst<A3, Lst<A2, Lst<A1, Lst<A0, Args>>>>>, Ret> Ldarg<A4, A3, A2, A1, A0, S, Args, Ret>(this IlGen<S, Lst<A4, Lst<A3, Lst<A2, Lst<A1, Lst<A0, Args>>>>>, Ret> g, N4 i)
		{
			g.il.Emit(OpCodes.Ldarg_S, 4);
			return new IlGen<Lst<A0, S>, Lst<A4, Lst<A3, Lst<A2, Lst<A1, Lst<A0, Args>>>>>, Ret>(g.il);
		}

		public static IlGen<Lst<A0, S>, Lst<A5, Lst<A4, Lst<A3, Lst<A2, Lst<A1, Lst<A0, Args>>>>>>, Ret> Ldarg<A5, A4, A3, A2, A1, A0, S, Args, Ret>(this IlGen<S, Lst<A5, Lst<A4, Lst<A3, Lst<A2, Lst<A1, Lst<A0, Args>>>>>>, Ret> g, N5 i)
		{
			g.il.Emit(OpCodes.Ldarg_S, 5);
			return new IlGen<Lst<A0, S>, Lst<A5, Lst<A4, Lst<A3, Lst<A2, Lst<A1, Lst<A0, Args>>>>>>, Ret>(g.il);
		}

		public static IlGen<Lst<A0, S>, Lst<A6, Lst<A5, Lst<A4, Lst<A3, Lst<A2, Lst<A1, Lst<A0, Args>>>>>>>, Ret> Ldarg<A6, A5, A4, A3, A2, A1, A0, S, Args, Ret>(this IlGen<S, Lst<A6, Lst<A5, Lst<A4, Lst<A3, Lst<A2, Lst<A1, Lst<A0, Args>>>>>>>, Ret> g, N6 i)
		{
			g.il.Emit(OpCodes.Ldarg_S, 6);
			return new IlGen<Lst<A0, S>, Lst<A6, Lst<A5, Lst<A4, Lst<A3, Lst<A2, Lst<A1, Lst<A0, Args>>>>>>>, Ret>(g.il);
		}

		
	}
}